/*
 * Classe que irá tratar a comunicação do programa cliente com os outros programas,
 * obs.: falta implementar ainda, crieio só para marcar a existencia
 *
 * 
 */
package client.controller;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ConexaoController {

    private ServerSocket socketServ;
    private Socket[] socket = new Socket[3];
    private TabuleiroController controle;

    public ConexaoController(TabuleiroController controle) throws IOException {
        this.controle = controle;
        criarConexao(4);
    }

    public void criarConexao(int numConexoes) throws IOException {
        if (controle.getIsServer()) {
            socketServ = new ServerSocket(5000);
            int i = 0;

            while ((i < numConexoes)||(socket[0]==null)||(socket[1]==null)||(socket[2]==null)) {
                if (socket[i] != null) {
                    socket[i] = socketServ.accept();
                    recebeStatus(i);
                }
                i++;
            }
            controle.setSalaCheia(true);
        } else {
            do{
            socket[0] = new Socket(InetAddress.getByName("localhost"), 5000);
            }while(!socket[0].isConnected());
            enviarStatus();
            
        }
    }
    
    //isso aki vai acontecer quando o cara NÃO for server
    public void enviarStatus() throws IOException{
        BufferedWriter  saida = new BufferedWriter(new OutputStreamWriter(socket[0].getOutputStream()));
        BufferedReader entrada = new BufferedReader(new InputStreamReader(socket[0].getInputStream()));
        saida.write(controle.criaStatus());
        String s = entrada.readLine();
        trataEntrada(s);
        saida.flush();
        saida.close();
    }
    
    public void enviaJogadores(){
        
    }
    
    //isso aki vai acontecer quando o cara FOR server
    public void recebeStatus(int i) throws IOException{
        BufferedReader entrada = new BufferedReader(new InputStreamReader(socket[i].getInputStream()));
        BufferedWriter  saida = new BufferedWriter(new OutputStreamWriter(socket[i].getOutputStream()));
        String status = entrada.readLine();
        
        trataEntradaServer(status, i);
            
        saida.write("NUM".concat(":".concat(Integer.toString(i).concat(":"))));
        saida.flush();
        saida.close();
        entrada.close();
    }
    
    public void trataEntrada(String in){
        String temp = in;
        
        if(temp.split(":")[0].equals("NUM")){
            controle.setNumJod(Integer.parseInt(in.split(":")[1]));
        } 
            
        }
        
        public void trataEntradaServer(String in, int i){
            String temp = in;
            
            if(temp.split(":")[0].equals("STA")){
                controle.addJogador(temp.split(":")[1], i+2);//mais dois pois o primeiro jogador eh o server e como i eh indice de vetor conta mais um pq inicia de xeo e mais outro pq um ja eh do serve
            }
        }
    
    

    public void enviarPosicoes() {
    }
}
